사용자 식별자
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
사용자 식별자(UID)는 유닉스 계열 시스템에서 각 사용자를 고유하게 식별하는 정수 값이다. UID는 일반적으로 0부터 시작하며, 파일 시스템과 프로세스에서 소유자를 나타내는 데 사용된다. UID는 실제 UID, 유효 UID, 저장된 UID, 파일 시스템 UID 등 여러 종류가 있으며, 각 UID는 프로세스의 권한과 파일 접근에 영향을 미친다. 그룹 식별자(GID)는 사용자를 그룹으로 묶어 관리하는 데 사용되며, 파일 권한 설정에 활용된다. GID는 일차 GID, 보조 GID, 유효 GID, 실제 GID 등으로 구분되며, UID와 GID는 시스템 보안과 자원 관리에 중요한 역할을 한다.
더 읽어볼만한 페이지
- 유닉스 - 유닉스 시간
유닉스 시간은 1970년 1월 1일 00:00:00 UTC부터 경과된 초를 나타내는 시스템으로, 컴퓨터 시스템에서 시간 저장 및 처리에 널리 사용되며 32비트 정수 표현 시 2038년 문제를 야기할 수 있고 64비트 정수로 해결 가능하며, 다양한 시스템에서 타임스탬프로 활용되지만 윤초 처리 차이로 UTC 시간과 완벽히 일치하지는 않는다. - 유닉스 - 유닉스 계열
유닉스 계열은 유닉스 운영체제의 특징과 설계를 공유하는 운영체제들을 지칭하며, 유전적, 상표, 기능적 유닉스로 분류되고 macOS는 상표 유닉스이자 유전적 유닉스에 해당하며 리눅스는 기능적 유닉스의 대표적인 예이다. - 운영체제 기술 - 프로세스
프로세스는 컴퓨터에서 실행되는 프로그램의 인스턴스로, 운영 체제가 시스템 자원을 효율적으로 관리하며 멀티태스킹 환경에서 독립적인 실행 흐름을 유지한다. - 운영체제 기술 - 커널 (컴퓨팅)
커널은 운영 체제의 핵심으로, 하드웨어와 소프트웨어 간 상호 작용을 관리하며 시스템 보안, 자원 관리, 하드웨어 추상화, 프로세스 스케줄링, 프로세스 간 통신, 다중 작업 환경 지원 등의 기능을 제공하고, 모놀리식, 마이크로, 혼합형 커널 등으로 구현되며 가상화 및 클라우드 컴퓨팅 환경에서 중요성이 커지고 있다.
사용자 식별자 | |
---|---|
사용자 식별자 | |
정의 | 사용자 식별자(UID)는 유닉스 및 유닉스 계열 운영 체제에서 사용자 계정을 식별하는 데 사용되는 숫자이다. |
설명 | 사용자 이름과는 달리, 사용자 식별자는 사용자 계정의 내부 표현으로 사용되며, 시스템에서 사용자를 참조하는 데 사용된다. |
표현 방식 | 사용자 식별자는 일반적으로 정수로 표현된다. |
시스템에서의 역할 | 사용자 식별자는 파일 소유권, 프로세스 권한, 그리고 자원 접근 제어와 같은 시스템 보안 기능을 구현하는 데 핵심적인 역할을 한다. |
UID의 종류 | |
루트 사용자 | UID가 0인 사용자로, 시스템에 대한 무제한적인 접근 권한을 가진다. |
시스템 사용자 | 시스템 운영에 필요한 서비스를 실행하는 데 사용되는 UID 100 미만의 사용자 계정이다. |
일반 사용자 | UID 100 이상의 사용자 계정으로, 시스템에 로그인하여 작업을 수행하는 데 사용된다. |
UID의 할당 및 관리 | |
할당 | 시스템 관리자는 사용자 계정을 생성할 때 각 사용자에게 고유한 UID를 할당한다. |
관리 | 사용자 계정의 삭제 또는 변경 시 UID를 재사용하지 않도록 관리하는 것이 중요하다. |
보안 고려 사항 | |
UID 재사용 | 삭제된 사용자의 UID를 재사용하는 것은 보안 위험을 초래할 수 있다. 이전 사용자의 권한이 새로운 사용자에게 이전될 수 있기 때문이다. |
UID 변조 | 악의적인 사용자가 UID를 변조하여 다른 사용자의 권한을 획득할 수 있다. 시스템은 이러한 공격을 방지하기 위해 적절한 보안 메커니즘을 갖추어야 한다. |
기타 정보 | |
참고 사항 | 유닉스 시스템에서 사용자 식별자는 매우 중요한 보안 요소이므로, 적절한 관리와 보안 정책이 필요하다. |
2. 사용자 식별자 (UID)
유닉스 계열 시스템에서 각 사용자는 고유한 사용자 식별자(UID)를 가진다. UID는 일반적으로 0부터 시작하는 정수 값이며, 시스템 내에서 사용자를 식별하는 데 사용된다.
프로세스가 생성한 파일의 소유자는 그 프로세스의 유효 사용자 식별자(effective user ID, `euid`)로 정해진다.[1] 파일 접근 시 커널은 프로세스의 유효 UID와 GID를 통해 파일 접근 허용 여부를 결정한다.
높은 권한을 가진 UID로 실행 중인 프로그램이 더 낮은 권한의 UID로 작업을 해야 할 때는 저장된 사용자 식별자(saved user ID, `suid`) 기능을 사용한다.
리눅스에는 파일 시스템 접근 제어 용도로 사용되는 파일 시스템 사용자 ID(file system user ID, `fsuid`)가 있다. 프로세스의 실제 소유자는 실제 UID(real UID, `ruid`)와 실제 GID(real GID, `rgid`)로 정해지고, 프로세스 간 시그널 전송에 영향을 준다.
2. 1. UID의 종류
유닉스 계열 시스템에서는 다양한 목적에 따라 여러 종류의 UID가 사용된다.- 실제 사용자 식별자 (Real UID, ruid): 프로세스를 실행한 사용자를 나타내며, 시그널 전송 권한에 영향을 준다.
- 유효 사용자 식별자 (Effective UID, euid): 대부분의 접근 검사에 사용되며, 프로세스가 생성한 파일의 소유자로 지정된다.
- 저장된 사용자 식별자 (Saved UID, suid): 권한 상승이 필요한 프로그램이 일시적으로 권한을 낮춰 작업할 때 사용된다.
- 파일 시스템 사용자 식별자 (File System UID, fsuid): 리눅스 커널에서 파일 시스템 접근 제어에 사용되는 특별한 UID이다.
2. 1. 1. 실제 사용자 식별자 (Real UID, ruid)
실제 UID(ruid)는 프로세스를 실행한 실제 사용자를 나타낸다. 이는 프로세스 간 시그널 전송 권한에 영향을 미친다.[15] 슈퍼유저 권한이 없는 프로세스가 다른 프로세스에 시그널을 보내려면, 시그널을 보내는 프로세스의 실제 UID 또는 유효 UID가 시그널을 받는 프로세스의 실제 UID 또는 저장 UID와 같아야 한다.[15] 자식 프로세스는 부모 프로세스로부터 이러한 권한(자격 증명)을 이어받기 때문에 상호 간 시그널 전송이 가능하다.UID 값의 범위는 시스템에 따라 다르지만, 최소 0부터 32767까지의 값을 가진다. 또한 다음과 같은 제한이 있다.
제한 사항 | 설명 |
---|---|
슈퍼유저 | UID는 항상 0이다. |
"nobody" 사용자 | 전통적으로 최대 UID 32767로 설정. 최근에는 시스템 범위(1-100) 또는 65530-65535로 설정하는 경우가 많다. |
1-100 UID | 시스템 용도로 확보. 시스템에 따라 499까지(Red Hat Enterprise Linux 6 이전), 999까지(데비안, RHEL7 이후)를 시스템 용도로 예약하기도 한다.[14] |
2. 1. 2. 유효 사용자 식별자 (Effective UID, euid)
유효 UID(`euid`)는 대부분의 접근 검사에 사용되며, 프로세스가 생성한 파일의 소유자로 지정된다.[1]파일에 접근할 때 커널은 프로세스의 유효 UID와 GID를 통해 파일 접근 허용 여부를 결정한다. POSIX 표준은 권한 있는 프로세스가 동적으로 서로 다른 역할을 수행할 수 있도록 프로세스 기술자 테이블에 세 가지 UID 필드를 도입했다. 프로세스의 유효 UID는 대부분의 접근 검사에 사용되며, 해당 프로세스에 의해 생성된 파일의 소유자로도 사용된다. 프로세스의 유효 GID (`egid`)는 접근 제어에 영향을 미치며, 사용 중인 특정 커널 구현의 의미와 사용된 마운트 옵션에 따라 파일 생성에도 영향을 줄 수 있다.[1]
프로세스는 여러 개의 UID (와 GID)를 가지고 상황에 따라 사용하며, 유효 UID와 유효 GID는 파일 생성과 파일 접근에 영향을 미친다. 파일 생성 시 커널은 해당 파일의 소유자를 생성하는 프로세스의 유효 UID와 유효 GID로 설정한다. 파일 접근 시 커널은 프로세스의 유효 UID와 유효 GID로 접근 권한 유무를 판단한다.[1]
2. 1. 3. 저장된 사용자 식별자 (Saved UID, suid)
높은 권한을 가진 UID로 실행 중인 프로그램이 더 낮은 권한의 UID로 작업을 해야 할 때 저장된 사용자 식별자 (saved user ID, `suid`) 기능을 사용한다. 어떤 프로세스가 유효 UID를 바꾸면, 바꾸기 전의 유효 UID는 해당 프로세스의 저장된 UID 슬롯에 복사된다. 바뀐 유효 UID로 작업을 완료하면, 프로세스는 다시 유효 UID를 저장된 UID 값으로 교체해서 원래 권한으로 돌아갈 수 있다. 유효 UID의 권한이 낮은 경우 프로세스는 실제 사용자나 저장된 UID로 밖에 유효 UID를 바꿀 수 없기 때문에 다시 높은 권한의 UID로 돌아가기 위해선 저장된 UID 기능이 반드시 필요하다.[14]저장 UID (`suid`)는 특권을 높여 동작 중인 프로그램이 일시적으로 비특권적인 작업을 할 때 사용한다. 유효 UID가 특권이 있는 값(통상 root)이었던 것을 비특권적인 값으로 변경할 때, 이전의 특권적인 UID를 저장 UID 슬롯에 복사한다. 특권 상태를 되돌릴 때, 저장 UID 값을 유효 UID로 되돌린다 (비특권적 프로세스가 유효 UID로 설정할 수 있는 것은 실 UID, 저장 UID, 유효 UID - 즉, 변경하지 않는 - 의 3종류뿐이다).
2. 1. 4. 파일 시스템 사용자 식별자 (File System UID, fsuid)
리눅스 커널은 파일 시스템 접근 제어를 위해 파일 시스템 사용자 ID(file system user ID, `fsuid`)라는 특별한 UID를 사용한다.[15] 이는 명시적으로 설정되지 않으면 유효 사용자 식별자(`euid`)와 동일하다.[15] `fsuid`는 NFS 서버와 같이 프로그램이 특정 `uid`에 대한 신호 전송 권한 없이 해당 `uid`의 파일 시스템 권한으로 제한하려는 경우에 사용된다.[2]`fsuid`는 실 UID, 저장 UID, 유효 UID 중 하나가 root인 경우에만 root로 설정할 수 있다.[2] 유효 UID가 변경되면, 이 변경 사항은 `fsuid`에도 반영된다.[2]
커널 2.0 이후부터 리눅스는 신호 전송에 대한 SUSv3 규칙을 따르기 때문에 `fsuid`가 더 이상 필요하지 않지만, 호환성을 위해 유지된다.[2]
2. 2. UID 값의 범위 및 예약된 범위
POSIX는 UID가 정수형이어야 한다고 요구한다. 대부분의 유닉스 계열 운영체제는 UID를 부호 없는 정수로 표현한다. UID 값의 크기는 시스템마다 다르지만, 일반적으로 32비트 정수를 사용하여 0부터 4,294,967,295 (232-1)까지의 값을 가질 수 있다.- 0: 일반적으로 슈퍼유저의 UID는 0이다.[10]
- -1: `(uid_t) -1` 값은 생략된 인수를 식별하기 위해 POSIX에서 예약되어 있다.[11]
- 65535: 이 값은 uid_t가 16비트였을 때 API 오류 반환 값이었기 때문에 여전히 사용을 피한다.
- nobody: 역사적으로 "nobody" 사용자에게는 여러 운영 체제에서 UID `-2`를 할당했지만, OpenBSD와 같이 215−1 = 32,767과 같은 다른 값도 사용된다.[12] 16비트 및 32비트 UID 간의 호환성을 위해 많은 리눅스 배포판은 이제 이를 216−2 = 65,534로 설정한다. 페도라 리눅스는 시스템 사용을 위해 정적으로 할당된 범위(0–99)의 마지막 UID를 nobody에 할당한다: 99
리눅스 표준 기반 코어 사양은 0에서 99 사이의 UID 값은 시스템에서 정적으로 할당해야 하며, 응용 프로그램에서 생성해서는 안 된다고 명시하고 있으며, 100에서 499 사이의 UID는 시스템 관리자와 설치 후 스크립트에서 동적으로 할당하기 위해 예약해야 한다고 명시하고 있다.[3]
데비안 리눅스는 100~999 범위를 동적으로 할당된 시스템 사용자와 그룹으로 예약할 뿐만 아니라, 60000-64999 범위의 사용자 및 그룹을 중앙에서 정적으로 할당하고 65000~65533 범위를 추가로 예약한다.[4]
FreeBSD에서, 패키지에 UID가 필요한 포터는 50에서 999 범위에서 자유로운 UID를 선택한 다음 정적 할당을 등록할 수 있다.[6][7]
일부 POSIX 시스템은 새로운 사용자를 위해 500부터 UID를 할당하고(macOS, Red Hat Enterprise Linux 버전 6까지), 다른 시스템은 1000부터 시작한다(Red Hat Enterprise Linux 버전 7부터,[8] openSUSE, Debian[4]).
3. 그룹 식별자 (GID)
UNIX 계열 시스템에서는 여러 사용자를 '그룹'으로 묶어 관리할 수 있다. POSIX나 UNIX 계열의 파일 권한은 사용자, 그룹, 기타의 3단계로 구성된다. 그룹을 이용하면 디스크나 프린터 등의 주변 기기 접근을 체계적으로 위임할 수 있다. 슈퍼유저가 관리 작업을 일반 사용자에게 위임하는 것도 가능하다. 이는 Windows NT 및 그 후속 운영체제의 'Administrators' 그룹과 유사하다.
'''그룹 식별자'''(Group Identifier, GID)는 그룹을 식별하는 번호이다.
3. 1. GID의 종류
GID는 시스템에 따라 다르지만, 최소 0부터 32767 사이의 값을 가진다. 슈퍼유저의 로그인 그룹은 항상 GID가 0이라는 제한이 있다.이 수치는 `/etc/passwd`와 `/etc/group` (또는 그와 동등한 파일)에서 참조된다. 섀도 패스워드 파일과 NIS도 GID를 숫자로 참조한다. 그룹 식별자는 UNIX의 파일 시스템이나 프로세스에서 소유자를 나타내는 필수 정보이다.
GID 값의 범위는 저장되는 메모리 영역의 크기에 따라 결정된다. 이전에는 16비트 부호 있는 정수가 사용되었으나, 음의 정수는 GID로 사용되지 않으므로 부호 없는 정수(0~65535)가 사용되었다. 최근 OS에서는 32비트 정수를 사용하므로 범위는 0~4,294,967,295이다.
3. 1. 1. 일차 GID (Primary GID)
UNIX 시스템에서 각 사용자는 적어도 하나의 그룹에 속하며, 해당 그룹은 `/etc/passwd` 파일 내의 해당 사용자 항목에 GID 숫자로 지정된다. 이를 일차 그룹 ID (primary group ID)라고 부른다.[1] 사용자는 그 외의 그룹에도 속할 수 있으며, `/etc/group` 파일에서 이를 설정한다. 이러한 그룹의 ID를 보조 그룹 ID (supplementary group ID) 또는 이차 그룹 ID (secondary group ID)라고 부른다.[1] 일반적으로 보조 그룹 ID에 속해 있는 것만으로는 그룹의 권한 접근 권한을 얻을 수 없다.[1]3. 1. 2. 보조 GID (Secondary GID, Supplementary GID)
사용자는 그 외의 그룹에도 속할 수 있으며, `/etc/group` 파일에서 이를 설정한다. 이러한 그룹의 ID를 보조 그룹 ID(supplementary group ID) 또는 이차 그룹 ID(secondary group ID)라고 한다.[1] 일반적으로 보조 그룹 ID에 속해 있는 것만으로는 그룹의 권한 접근 권한을 얻을 수 없다.[1]3. 1. 3. 유효 그룹 식별자 (Effective GID, egid)
어떤 프로세스가 생성한 파일의 소유자는 그 프로세스의 유효 사용자 식별자(effective user ID, `euid`)로 정해진다. 커널과 마운트 옵션에 따라 유효 GID (`egid`) 또한 파일 생성에 영향을 주기도 한다. BSD 유닉스에서는 새 파일의 소유 그룹은 무조건적으로 해당 파일이 소속된 디렉토리의 소유 그룹으로 정해진다. 이에 반해 AT&T 시스템 5 유닉스에서는 새 파일의 소유 그룹은 일반적으로 파일을 만든 프로세스의 유효 GID로 정해진다. 그리고 어떤 파일 시스템들은 마운트시에 BSD나 AT&T 방식 중 어떤 방식을 따를지 선택하게 해준다.파일에 접근시 커널은 프로세스의 유효 UID와 GID를 통해 파일 접근을 허용할지 말지를 결정한다. UNIX 계열 시스템에서는, 복수의 사용자를 "그룹"으로 분류할 수 있다. POSIX나 UNIX 계열의 파일 권한은 3단계(사용자, 그룹, 기타)로 구성되어 있다. 그룹을 사용함으로써, 디스크나 프린터 등의 주변 기기에 대한 액세스를 정식적인 형태로 위임하는 것이 가능해진다. 동일한 수법으로 슈퍼유저가 관리 작업을 일반 사용자에게 위임하는 것도 가능하게 한다. 이는, Windows NT나 그 후속 OS에서의 'Administrators' 그룹과 유사하다.
그룹 식별자(Group Identifier)는 그룹을 식별하는 번호이다. GID의 값의 범위는 시스템에 따라 다르지만, 최소 0부터 32767의 값을 가진다. 또한, 다음과 같은 제한이 있다.
- 슈퍼유저의 로그인 그룹은 항상 GID 0이다.
이 수치는 `/etc/passwd`와 `/etc/group` (또는 그와 동등한 파일)에서 참조된다. 섀도 패스워드 파일과 NIS도 수치로서의 GID를 참조한다. 그룹 식별자는 UNIX의 파일 시스템이나 프로세스에 (소유자를 나타내는 정보로서) 필수적인 정보이다.
사용 가능한 그룹 식별자의 값의 범위는, 그것을 저장하는 메모리 영역의 크기에 규정된다. 종래에는 16비트의 부호 있는 정수가 사용되었다. 부호는 필요하지 않기 때문에 (음의 정수는 GID로 사용되지 않는다), 부호 없는 정수가 사용되게 되었다 (0~65535). 최근의 OS에서는 32비트의 정수가 사용되기 때문에, 그 범위는 0~4,294,967,295이다. 유닉스 프로세스는 실효 GID와 실 GID를 갖는다. 일반적으로 이들은 동일하지만, setgid 프로세스에서는 다른 GID가 된다. setgid 프로세스는 특권을 가진 그룹이 되어 특권이 필요한 기능을 실행하고, 필요에 따라 쉽게 비특권 그룹으로 되돌릴 수 있다.
3. 1. 4. 실제 그룹 식별자 (Real GID, rgid)
유닉스 프로세스는 실제 그룹 식별자(Real GID, rgid)를 갖는다. 일반적으로 유효 GID와 동일하지만, setgid 프로세스에서는 다른 GID가 된다. setgid 프로세스는 특권을 가진 그룹이 되어 특권이 필요한 기능을 실행하고, 필요에 따라 쉽게 비특권 그룹으로 되돌릴 수 있다.참조
[1]
Manpage
chmod
Solaris
[2]
서적
The Linux Programming Interface
No Starch Press
2010
[3]
웹사이트
9.3. UID Ranges
https://refspecs.lin[...]
2016-09-24
[4]
웹사이트
Debian Policy Manual – Section 9.2.2: UID and GID classes
https://www.debian.o[...]
2019-07-18
[5]
웹사이트
Users, groups, UIDs and GIDs on systemd systems
https://github.com/s[...]
2020-09-26
[6]
웹사이트
FreeBSD Porter's Handbook
http://www.freebsd.o[...]
2016-09-24
[7]
웹사이트
Chapter 6. Special Considerations
http://www.freebsd.o[...]
[8]
웹사이트
RHEL7 System changes
https://www.certdepo[...]
2016-01-17
[9]
웹사이트
"for both allocation ranges: when an UID allocation takes place NSS is checked for collisions first, and a different UID is picked if an entry is found"
https://systemd.io/U[...]
[10]
웹사이트
Getpwuid
http://pubs.opengrou[...]
2016-09-24
[11]
웹사이트
Chown
http://pubs.opengrou[...]
2016-09-24
[12]
웹사이트
NetBSD Problem Report #6594: the default "nobody" credentials (32767:9999) do not match mountd's default (-2:-2)
http://gnats.netbsd.[...]
2016-09-24
[13]
웹사이트
Namespaces in operation, part 5: User namespaces
https://lwn.net/Arti[...]
2016-09-24
[14]
웹사이트
4.3. コマンドラインツールの使用
https://access.redha[...]
Red Hat
2020-11-06
[15]
서적
The Linux Programming Interface
No Starch Press
2010
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com